﻿#pragma once
#if defined(_MSC_VER)
	#define _CRT_SECURE_NO_WARNINGS
#endif
//#include <stdio.h>
#include <iostream>
#include <vector>
#include <array>
#include <math.h>
//#define : 123       // 不能定义 : 作为宏

// 引用其他头文件
#include "TimeBase.h"

using std::cout;
using std::endl;
//using str = std::string;

class TestBase  : public TimeIntervalBase
{
private:
	std::string name;


protected:
	void interval() override {
		static int count = 0;
		cout << format_now_time("%x年%x月%x日 %A %x:%x:%x:%x", true) << " count = " << ++count << endl;
	}


public:
	TestBase() = default;
	TestBase(unsigned long microseconds = 0)
		: TimeIntervalBase(microseconds) // 显示调用基类的构造函数
		, name(name) {
		std::cout << "TestBase Constructor" << std::endl;
	}
	~TestBase() { std::cout << "~TestBase()" << std::endl; }

	char* operator [](size_t index) { // 重载 [] 运算符
		return (char*)name.c_str() + index;
	}
	// void operator :() {} // 不能重载 : 因为它是类成员访问符，不是运算符
};


// 对齐数
#if defined(_MSC_VER) || defined(_MSVC_LANG)
	//MSVC：可以使用 __declspec(align) 显式指定对齐边界。
	#define align_to(num) __declspec(align(num))
	struct align_to(1) st1 {
#else
#	pragma pack(push, 1)
struct st1 {
#endif
	long long a;
	long long b;
	bool bl1;
	bool bl2;
};
#if !defined _MSC_VER && !defined(_MSVC_LANG)
#	pragma pack(pop)
#endif
